import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object week2_2 {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("app")
    val session = SparkSession.builder().config(sparkConf).getOrCreate()

    val movie = session.read.option("header", true).csv("data/movies.txt").toDF("movie_id", "movie_name", "genre", "release_year")
    val users = session.read.option("header", true).csv("data/users.txt").toDF("user_id", "user_name", "gender", "birth_year","register_date")
    val watch_history = session.read.option("header", true).csv("data/watch_history.txt").toDF("user_id", "movie_id", "watch_time", "rating","watch_duration")

    movie.show(10)
    users.show(10)
    watch_history.show(10)



    movie.createTempView("movie")
    users.createTempView("users")
    watch_history.createTempView("watch_history")

//    使用Spark SQL查询计算每部电影的平均评分（rating）。（5分）
    session.sql("select m.movie_name,avg(rating) from watch_history h left join movie m on h.movie_id=m.movie_id group by m.movie_name").show()
//    4. 统计每个用户观看的电影数量和总时长（5分）
    session.sql("select user_id,count(movie_id),sum(watch_duration) from watch_history group by user_id").show()
//    5. Spark SQL查询筛选出评分大于3的电影，并按照评分降序排列。（5分）
    session.sql("select * from watch_history where rating>3 order by rating desc").show()
//    6. 创建一个自定义UDF函数，对用户的年龄进行分级，0-18岁为少年，19-35岁为青年，36-65为中年，65以上为老年（5分）
//    7. 结合第6问的自定义函数，统计不同年龄段的用户的观看电影的数量，时长，以及好评率（自主设计好评）（5分）
//    8. 统计出老年人最喜欢的电影（自主设计最喜欢）（5分）
//    9. 计算不同类型电影差评率top3的电影（自主设计差评）（5分）
//    10. 创建一个自定义UDF函数，将`watch_time`字段中的时间戳转换为星期几的字符串（例如：`周一`, `周二`等），并通过SQL查询显示每部电影在每周几被观看最多的次数。（5分）




    session.stop()
  }
}
